package pck_tramitedocu.pck_web;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import pck_tramitedocu.pck_web.FileUploadListener.FileUploadStats;
import pck_tramitedocu.pck_web.FileUploadListener.FileUploadStatus;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.missiondata.fileupload.MonitoredDiskFileItemFactory;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import pck_tramitedocu.pck_src.pck_pojos.Cls_Trabajador;
import pck_tramitedocu.pck_src.pck_pojos.Cls_documento_extension;
import pck_tramitedocu.pck_src.pck_utiles.Cls_Parametros;

public class FileUploadServlet extends HttpServlet {

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {

            try{
                String tipo_fichero = request.getParameter(Cls_Parametros.Request_TIPO_FICHERO);
            }catch(NullPointerException ex){
                Logger.getLogger(FileUploadServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
            String dni_usuario_upload_archvivo = ((Cls_Trabajador) request.getSession().getAttribute(Cls_Parametros.Session_OBJETO_USUARIO)).getCodigo();
            String saveFilePath = Cls_Parametros.RUTA_DOCUMENTOS_SERVIDOR2;
            FileUploadListener listener = new FileUploadListener(request.getContentLength());
            request.getSession().setAttribute("FILE_UPLOAD_STATS", listener.getFileUploadStats());
            double tamanio_archivos = (double)(listener.getFileUploadStats().getTotalSize())/(1000 * 1000)+
                    Double.parseDouble(((Cls_Trabajador) request.getSession().getAttribute(Cls_Parametros.Session_OBJETO_USUARIO)).getTamanio_archivo());
            request.getSession().setAttribute("TAM_FILE", tamanio_archivos);
            request.getSession().setAttribute("TIP_FILE", request.getParameter(Cls_Parametros.Request_TIPO_FICHERO));

            if((tamanio_archivos>Double.parseDouble(""+request.getSession().getAttribute(Cls_Parametros.TAMANIO_ARCHIVOS_MB)))){

            }else{
                DiskFileItemFactory factory = new MonitoredDiskFileItemFactory(listener);
                factory.setRepository(new File(saveFilePath));
                ServletFileUpload upload = new ServletFileUpload(factory);
                List items = upload.parseRequest(request);
                String nombre_archivo ="";

                int contador_archivos = Integer.parseInt(((Cls_Trabajador) request.getSession().getAttribute(Cls_Parametros.Session_OBJETO_USUARIO)).getCant_archivo_puede_copiar());
                contador_archivos++;
                for (Iterator i = items.iterator(); i.hasNext();) {
                    FileItem fileItem = (FileItem) i.next();
                    if (!fileItem.isFormField()) {
                        String extension_archivo = (fileItem.getName().toString());
                        nombre_archivo = (fileItem.getName().toString());
                        extension_archivo = (extension_archivo.substring(extension_archivo.lastIndexOf(".")));
                        if(Double.parseDouble(""+request.getSession().getAttribute(Cls_Parametros.TAMANIO_ARCHIVOS_MB))>500){
                            if(request.getParameter(Cls_Parametros.Request_TIPO_FICHERO)==null){
                                ((ArrayList<Cls_documento_extension>) request.getSession().getAttribute(Cls_Parametros.Session_OBJETO_USUARIO_LIST)).
                                        add(new Cls_documento_extension(""+contador_archivos, nombre_archivo+"|"));
                                fileItem.write(new File(saveFilePath +dni_usuario_upload_archvivo+ "_I_"+contador_archivos+extension_archivo));
                            }else{
                                fileItem.write(new File(saveFilePath +dni_usuario_upload_archvivo+ ".pdf"));
                                contador_archivos--;
                            }
                        }else{
                            ((ArrayList<Cls_documento_extension>) request.getSession().getAttribute(Cls_Parametros.Session_OBJETO_USUARIO_LIST)).
                                    add(new Cls_documento_extension(""+contador_archivos, nombre_archivo+"|"));
                            fileItem.write(new File(saveFilePath +dni_usuario_upload_archvivo+ "_I_"+contador_archivos+extension_archivo));
                        }
                    }
                }
                ((Cls_Trabajador) request.getSession().getAttribute(Cls_Parametros.Session_OBJETO_USUARIO)).setCant_archivo_puede_copiar(""+contador_archivos);
                ((Cls_Trabajador) request.getSession().getAttribute(Cls_Parametros.Session_OBJETO_USUARIO)).setTamanio_archivo(""+tamanio_archivos);
                request.getSession().setAttribute("NOMBRE_FILE", nombre_archivo);
            }            
        } catch (Exception e) {
            FileUploadStats stats = new FileUploadListener.FileUploadStats();
            stats.setCurrentStatus(FileUploadStatus.ERROR);
            request.getSession().setAttribute("FILE_UPLOAD_STATS", stats);
            Logger.getLogger(FileUploadServlet.class.getName()).log(Level.SEVERE, null, e);
        }
    }
}